<?php
namespace Swiftx\Interfaces\Router;
use Swiftx\Interfaces\Ioc\Container;

/**
 * 路由分发器
 *
 * @author		胡永强  <odaytudio@gmail.com>
 * @since		2015-10-09
 * @copyright	Copyright (c) 2014-2015 Swiftx Inc.
 */
interface Dispatcher {

    /**
     * 设置主机名
     * @param string $value
     * @return Dispatcher
     */
    public function setHost(string $value):Dispatcher;

    /**
     * 设置目标文档
     * @param string $value
     * @return Dispatcher
     */
    public function setDocument(string $value):Dispatcher;

    /**
     * 允许访问的方法
     * @param string $value
     * @return Dispatcher
     */
    public function setMethod(string $value):Dispatcher;

    /**
     * 允许访问的方法
     * @return string
     */
    public function getMethod():string ;

    /**
     * 依赖注入容器
     * @param Container $container
     */
    public function setContainer(Container $container);

    /**
     * 匹配参数
     * @param Request $request
     * @return bool
     */
    public function pattern(Request $request):bool ;

    /**
     * 获取相应
     * @param Request $request
     * @param Response $response
     * @return void
     */
    public function bundle(Request $request, Response $response);

    /**
     * 生成请求地址
     * @param string[] ...$args
     * @return string
     */
    public function uri(string ...$args):string;

}